import sys
import os
from cx_Freeze import setup, Executable
from datetime import datetime

# 设置编译时的时间戳
build_timestamp = datetime.now().strftime('%Y%m%d')

# 获取Python安装目录，用于包含额外的依赖
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))

# 包含的额外文件
extra_files = [
    'dark_style.qss',
    'pdf_converter_icon.ico'
]

# 最小化排除的模块，只排除那些绝对不会使用到的模块，提高兼容性
excludes = [
    'tkinter', 'test', 'unittest', 'pydoc', 'doctest',
    'PIL._tkinter_finder',  # 只排除绝对不会使用的PIL插件
    'numpy.distutils'  # 只排除numpy中非必要的模块
]

# 扩大包含的模块范围，确保所有可能需要的模块都被包含，提高兼容性
includes = [
    'PyQt5.QtCore', 'PyQt5.QtGui', 'PyQt5.QtWidgets',  # PyQt5核心模块
    'PyQt5.QtXml', 'PyQt5.QtSvg',  # 额外包含可能用到的PyQt5模块
    'PIL', 'PIL.Image', 'PIL.ImageDraw', 'PIL.ImageFont', 'PIL.ImageOps', 'PIL.PdfImagePlugin',  # 包含PIL完整模块
    'numpy', 'numpy.core', 'numpy.ma', 'numpy.lib', 'numpy._pytesttester',  # 包含numpy完整模块
    'qdarkstyle',
    'logging', 'pathlib', 'concurrent', 'concurrent.futures',  # 确保包含所有必要的模块
    'time', 'os', 'sys', 'traceback', 'threading', 'queue', 'subprocess', 'shutil',  # 包含常用标准库
    'importlib', 'pkgutil', 'pkg_resources'  # 确保包管理相关模块被包含
]

# 包含的二进制文件
bin_includes = []

# 调整构建选项以提高兼容性和成功率
build_exe_options = {
    'includes': includes,
    'excludes': excludes,
    'include_files': extra_files,
    'optimize': 0,  # 完全关闭优化，提高兼容性
    'include_msvcr': True,  # 自动包含MSVCR，确保运行时环境完整
    'zip_include_packages': '',  # 不使用zip打包，避免潜在的导入问题
    'zip_exclude_packages': '*',  # 不压缩任何包
    'silent_level': 0,  # 输出详细信息以便调试
    'replace_paths': [('*', '')],  # 移除路径信息
    'build_exe': f'build/exe.win-amd64-3.12_{build_timestamp}'  # 添加时间戳
}

# 创建可执行文件配置
base = None
if sys.platform == 'win32':
    base = 'Win32GUI'  # 使用Win32GUI以隐藏控制台窗口

# 定义可执行文件 - 增加详细配置以减少杀毒软件误报
executable = Executable(
    script='img_to_pdf_gui.py',
    base=base,
    icon='pdf_converter_icon.ico',
    target_name='img_to_pdf_gui.exe',
    copyright='Copyright (C) 2024 Image to PDF Converter',
    # 不使用shortcutName和shortcutDir，这些可能会触发某些杀毒软件
)

# 添加应用程序元数据，提高可识别性，减少杀毒软件误报
company_name = "Image PDF Tools"
product_name = "Image to PDF Converter"

# 设置 - 增加详细元数据和优化选项
setup(
    name=product_name,
    version='1.0.0',  # 使用更规范的版本号格式
    description='高效图像到PDF转换工具，支持批量处理和自定义设置',
    long_description='''
    Image to PDF Converter 是一个专业的图像转换工具，可以将多种格式的图像文件批量转换为PDF文档。
    支持JPG、PNG、BMP等常见图像格式，提供多种转换选项和自定义设置，满足不同用户的需求。
    ''',
    author='Image PDF Tools',
    author_email='support@imagepdftools.com',  # 示例邮箱
    url='https://www.imagepdftools.com',  # 示例网址
    license='MIT',
    keywords=['image', 'pdf', 'converter', 'batch', 'gui'],
    options={
        'build_exe': build_exe_options,
    },
    executables=[executable],
    # 添加分类信息，符合Windows应用程序标准（移除已弃用的License classifier）
    classifiers=[
        'Development Status :: 4 - Beta',
        'Environment :: Win32 (MS Windows)',
        'Intended Audience :: End Users/Desktop',
        'Operating System :: Microsoft :: Windows',
        'Programming Language :: Python :: 3.12',
        'Topic :: Multimedia :: Graphics :: Conversion',
        'Topic :: Utilities',
    ],
    # 确保不会自动生成不必要的文件
    zip_safe=False,
)